package main

import (
	"errors"
	"fmt"
	"net/http"
)

func redirectLimitTimes() {
	// 限制重定向的次数
	client := &http.Client{
		CheckRedirect: func(req *http.Request, via []*http.Request) error {
			if len(via) > 10 {
				return errors.New("重定向次数过多")
			}
			return nil
		},
	}

	request, _ := http.NewRequest("GET", "http://httpbin.org/redirect/20", nil)
	_, err := client.Do(request)
	if err != nil {
		panic(err)
	}
}

func redirectForbidden() {
	// 禁止重定向
	client := &http.Client{
		CheckRedirect: func(req *http.Request, via []*http.Request) error {
			return http.ErrUseLastResponse
		},
	}
	request, _ := http.NewRequest("GET", "http://httpbin.org/cookies/set?name=wjf", nil)
	// 会阻止重定向
	r, err := client.Do(request)
	if err != nil {
		panic(err)
	}

	// 不阻止
	// r, err := http.DefaultClient.Do(request)
	// if err != nil {
	// 	panic(err)
	// }
	defer r.Body.Close()
	fmt.Printf("%s", r.Request.URL)

}

func main() {
	// 重定向
	// redirectLimitTimes()
	redirectForbidden()
}
